package com.tbit.uqbike.client.service.impl;

import com.tbit.uqbike.client.pojo.User;
import com.tbit.uqbike.client.service.BrandShareRelationService;
import com.tbit.uqbike.client.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Objects;

/**
 * @author: qiu.longjie
 * @create: 2025-05-19
 */
@Slf4j
@Service
public class BrandShareRelationServiceImpl implements BrandShareRelationService {

    @Autowired
    private UserService userService;

    /**
     * 检查用户是否在别的品牌下有实名，如果存在，则同步实名信息到当前品牌
     *
     * @param userId  用户id
     * @param phone   用户手机号
     * @param brandId 品牌id
     * @return 另一个品牌下的实名用户信息，如果不存在则返回null
     */
    @Override
    public User checkNameAuth(Integer userId, String phone, Integer brandId) {
        // 先查当前品牌与其他品牌有配置共享的所有品牌id
        // 其实可以一次查询，分开的原因是因为品牌共享的场景可能不是很多，避免每次都查user表
        List<Integer> brandIds = userService.getBrandIdsByShareConfig(brandId);
        if(brandIds == null || brandIds.isEmpty()) {
            return null;
        }
        // 检查用户是否在其他品牌下已实名
        User user = userService.getByShareBrandAndHasNameAuth(brandIds, phone);
        if (null == user) {
            return null;
        }
        log.info("用户在其他品牌下已实名，同步实名信息到当前品牌, brandId:{},userId:{}, phone:{},idNO:{}, name:{}", brandId, userId, phone, user.getIdNO(), user.getName());
        userService.updateNameAuth(userId, user.getIdNO(), user.getName());
        return user;
    }

    @Override
    public void handleNameAuthByBrandShare(User user) {
        if (null == user || null == user.getUserId() || null == user.getPhone() || null == user.getAccountId() || user.getNameAuth()){
            return;
        }
        /**校验实名认证用户是否在其他品牌已经实名*/
        User shareUser = checkNameAuth(user.getUserId(), user.getPhone(), user.getAccountId());
        // 实名认证用户，同步其它品牌实名信息
        if (Objects.nonNull(shareUser)) {
            user.setIdNO(shareUser.getIdNO());
            user.setName(shareUser.getName());
            user.setNameAuth(true);
        }
    }
}
